const express=require('express');
const consolidate=require('consolidate');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
const static=require('express-static');
const bodyparser=require('body-parser');

var server=express();
//公式固定写法
var http=require('http').Server(server);
var io=require('socket.io')(http);
server.use(bodyparser.urlencoded({extended:false}));

//配置模板引擎
server.set('view engine','html');
server.set('views','./views');
server.engine('html',consolidate.ejs);
//处理cookie和session
server.use(cookieParser());
(function(){
    var arr=[];
    for(var i=0;i<1000;i++){
        arr.push('asdf_'+Math.random());
    }
    server.use(cookieSession({
        keys:arr,
        name:'pangeasdf',
        maxAge:10*1000*60
    }))
})()
//人数
var arr=[];
var name='';
//处理与用户登录
server.get('/',function(req,res){
    res.render('login.ejs',{});
})
server.post('/',function(req,res){
    if(req.body.name==''){
        res.send({ok:false,msg:'名字不能为空'})
        return;
    }else if(arr.indexOf(req.body.name)!=-1){
        res.send({ok:false,msg:'用户已经存在'})
        return;
    }else{
        arr.push(req.body.name);
        req.session['username']=req.body.name;
        name=req.session['username'];
        res.send({ok:true,msg:'成功'})
    }
});

//处理在线人数和用户退出
server.get('/chat',(req,res)=>{
    if(!req.session['username']){
        res.redirect('/');
    }else{
    
        res.render('chat.ejs',{
        userNum:arr,
        username:req.session['username'],
    })
    }
})
//处理用户退出
server.post('/chat',(req,res)=>{
    if(req.body.act=='getNum'){
        res.send({ok:true,msg:arr.length,data:arr});
    }
    if(req.body.act=="out"){
        console.log(req.body.name+'--退出了！');
        arr.splice(req.body.name,1);
        delete req.session['username']==req.body.name;
        res.send({ok:true,msg:'退出成功！'});
    }  
});

io.on('connection',function(socket){       //要把socket对象传进回调函数里面     socket每一个连接上的用户都有一个
    console.log(name+'--连接了')
    //接受客户端的'msg'的数据
    socket.on('msg',function(data){
        if(data.indexOf('=>')!=-1){
           var msg=data.split('=>');
           if(arr.indexOf(msg[1])!=-1){
                io.emit(msg[1],msg[0]);
           }else{
               console.log('没有这个用户！')
           }
        }else{
            io.emit('huida',data);
            //socket.emit('huida',{a:'pasdf',b:'sdfdf'});  //谁访问服务器就会把信息发给谁
            return;
        }  
    })
})
server.use(static('./www'))
//http进行监听
http.listen(80);